package org.jeecg.modules.workflow.service.definition;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.common.util.collection.CollectionUtils;
import org.jeecg.common.workflow.vo.definition.form.BpmFormCreateReqVO;
import org.jeecg.common.workflow.vo.definition.form.BpmFormPageReqVO;
import org.jeecg.common.workflow.vo.definition.form.BpmFormUpdateReqVO;
import org.jeecg.modules.workflow.entity.BpmForm;

import javax.validation.Valid;
import java.util.*;

/**
 * 工作流的单定义Service接口
 *
 * @author whnk
 * @date 2022-04-20
 */
public interface BpmFormService
{
    String createForm(@Valid BpmFormCreateReqVO createReqVO);

    /**
     * 更新动态表单
     *
     * @param updateReqVO 更新信息
     */
    void updateForm(@Valid BpmFormUpdateReqVO updateReqVO);

    /**
     * 删除动态表单
     *
     * @param id 编号
     */
    void deleteForm(String id);


    /**
     * 获得动态表单
     *
     * @param id 编号
     * @return 动态表单
     */
    BpmForm getForm(String id);

    /**
     * 获得动态表单列表
     *
     * @return 动态表单列表
     */
    List<BpmForm> getFormList();

    /**
     * 获得动态表单分页
     *
     * @param pageReqVO 分页查询
     * @return 动态表单分页
     */
    IPage<BpmForm> getFormPage(BpmFormPageReqVO pageReqVO);

    /**
     * 获得动态表单列表
     *
     * @param ids 编号
     * @return 动态表单列表
     */
    List<BpmForm> getFormList(List<Long> ids);

    /**
     * 获得动态表单 Map
     *
     * @param ids 编号
     * @return 动态表单 Map
     */
    default Map<String, BpmForm> getFormMap(Collection<String> ids) {
        if (CollUtil.isEmpty(ids)) {
            return Collections.emptyMap();
        }
        List idList = new ArrayList();
        idList.addAll(ids);
        return CollectionUtils.convertMap(this.getFormList(idList), BpmForm::getId);
    }


}
